package com.yeskery.nut.extend.mcp.core.schema;

import java.util.List;

/**
 * 内容规范
 * @author sprout
 * 2025-04-18 09:36
 */
public abstract class ContentSchema {

    /**
     * 内容接口
     */
    public interface Content {

        /**
         * 内容类型
         * @return 内容类型
         */
        default String type() {
            if (this instanceof TextContent) {
                return "text";
            } else if (this instanceof ImageContent) {
                return "image";
            } else if (this instanceof EmbeddedResource) {
                return "resource";
            }
            throw new IllegalArgumentException("Unknown Content Type[" + this.getClass().getName() + "]");
        }
    }

    /**
     * 基础内容实现类
     */
    public abstract static class BaseContent implements Content {
        /**
         * 阅读者
         */
        private List<Role> audience;
        /**
         * 优先级
         */
        private Double priority;

        /**
         * 获取内容类型
         * @return 内容类型
         */
        public String getType() {
            return type();
        }

        /**
         * 获取阅读者
         * @return 阅读者
         */
        public List<Role> getAudience() {
            return audience;
        }

        /**
         * 设置阅读者
         * @param audience 阅读者
         */
        public void setAudience(List<Role> audience) {
            this.audience = audience;
        }

        /**
         * 获取优先级
         * @return 优先级
         */
        public Double getPriority() {
            return priority;
        }

        /**
         * 设置优先级
         * @param priority 优先级
         */
        public void setPriority(Double priority) {
            this.priority = priority;
        }
    }

    /**
     * 文本内容
     */
    public static class TextContent extends BaseContent {
        /**
         * 文本内容
         */
        private String text;

        /**
         * 获取文本内容
         * @return 文本内容
         */
        public String getText() {
            return text;
        }

        /**
         * 设置文本内容
         * @param text 文本内容
         */
        public void setText(String text) {
            this.text = text;
        }
    }

    /**
     * 图片内容
     */
    public static class ImageContent extends BaseContent {
        /**
         * 图片数据
         */
        private String data;

        /**
         * 图片类型
         */
        private String mimeType;

        /**
         * 获取图片数据
         * @return 图片数据
         */
        public String getData() {
            return data;
        }

        /**
         * 设置图片数据
         * @param data 图片数据
         */
        public void setData(String data) {
            this.data = data;
        }

        /**
         * 获取图片类型
         * @return 图片类型
         */
        public String getMimeType() {
            return mimeType;
        }

        /**
         * 设置图片类型
         * @param mimeType 图片类型
         */
        public void setMimeType(String mimeType) {
            this.mimeType = mimeType;
        }
    }

    /**
     * 内嵌资源内容
     */
    public static class EmbeddedResource extends BaseContent {
        /**
         * 资源内容
         */
        private ResourceContentsSchema.ResourceContents resource;

        /**
         * 获取资源内容
         * @return 资源内容
         */
        public ResourceContentsSchema.ResourceContents getResource() {
            return resource;
        }

        /**
         * 设置资源内容
         * @param resource 资源内容
         */
        public void setResource(ResourceContentsSchema.ResourceContents resource) {
            this.resource = resource;
        }
    }
}
